package com.sxbbc.common.core.service;

import java.util.List;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.function.common.RestResponse;
import com.sxbbc.common.core.dto.jz.RefundVo;
import com.sxbbc.common.core.entity.jz.OrderRefundLog;
import com.sxbbc.common.core.utils.BasePage;

/**
 * <p>
 * 订单退款记录表 服务类
 * </p>
 *
 * @author xiaoky
 * @since 2019-05-11
 */
public interface IOrderRefundLogService extends IService<OrderRefundLog> {
	/**
	 * 查询退款列表
	 * @param page 分页
	 * @param wrapper 查询条件
	 * @return Page<OrderRefundLog> 分页数据
	 */
	IPage<OrderRefundLog> queryRefunds(BasePage<OrderRefundLog> page, QueryWrapper<OrderRefundLog> wrapper);

	/**
	 * 退款驳回
	 * @param refundId 退款数据id
	 * @param rejectRemark 驳回理由
	 * @param checkId 操作人id
	 * @return RestResponse
	 * @author xiaoky
	 */
	RestResponse handleRefundRefect(Integer refundId, String rejectRemark, Integer checkId);

	/**
	 * 退款通过
	 * @param refundId 退款数据id
	 * @param checkId 操作人id
	 * @return RestResponse
	 * @author xiaoky
	 */
	RestResponse handleRefundSuccess(Integer refundId, Integer checkId);

	/**
	 * 商家订单主动退款
	 * @param orderCode
	 * @param loginId 当前登录账号
	 * @return RestResponse
	 */
	RestResponse handleBusRefund(String orderCode, Integer loginId);

	/**
	 * 查询退款列表
	 * @param page 分页数据
	 * @param refundVo 退款数据
	 * @return IPage<RefundVo> 查询的分页数据
	 */
	IPage<RefundVo> queryRefundList(BasePage<RefundVo> page, RefundVo refundVo);
	/**
	 * 通过退款编号获取退款详情
	 * @param refundCode 退款编号
	 * @return RefundVo 退款数据
	 */
	RefundVo getRefundDetail(String refundCode);
	
	/**
	 * 取消退款接口
	 * @param token 获取cid
	 * @param refundId 退款数据id
	 * @param cancelReason 取消原因
	 * @return RestResponse 处理结果
	 */
	RestResponse cancelRefund(Integer refundId, String cancelReason);

	/**
	 * 退款显示页面
	 * @param orderDetailId 订单详情Id
	 * @return 
	 * @author xiaoky
	 */
	RefundVo getRefundApplyPage(Integer orderDetailId);

	/**
	 * 退款申请
	 * @param refundLog
	 * @return 退款申请结果
	 * @author xiaoky
	 */
	RestResponse handleRefundApply(OrderRefundLog refundLog);

	/**
	 * 查询协商历史
	 * @param orderDetailId 订单详情id
	 * @return
	 * @author xiaoky
	 */
	List<OrderRefundLog> queryRefundHistory(Integer orderDetailId);

	/**
	 * 待发货订单直接退款
	 * @param cid
	 * @param orderDetailId 订单详情
	 * @param reason 退款原因(只是由前端传值过来——未有任何处理)
	 * @return
	 * @author xiaoky
	 */
	RestResponse handleDirectRefund(Integer cid, Integer orderDetailId, String reason);
}
